#pragma once
#include <Linkcontrol.h>
#include <stdint.h>

#define Total_Axis_Num 1

#pragma pack(push, 1)
struct RX_PDOS {
    uint16_t control_word;                      // 伺服器控制字   #x6040
    int32_t target_pos;                         // 伺服器目标位置 #x607A
    int32_t target_velocity;                    // 伺服器目标速度 #x60FF
    uint16_t target_torque;                     // 伺服器控制力矩 #x6071
    uint8_t control_mode;                       // 伺服器控制模式 #x6060
};

struct TX_PDOS {
    uint16_t status_word;                       // 伺服器状态字   #x6041
    int32_t current_pos;                        // 伺服器当前位置 #x6064
    int32_t current_velocity;                   // 伺服器当前速度 #x606C
    uint16_t current_torque;                    // 伺服器当前力矩 #x6077
    uint8_t control_mode_display;               // 伺服器控制模式 #x6061
};

struct SlavePDOS {
    RX_PDOS rx_pdos;                            // 主站下发数据
    TX_PDOS tx_pdos;                            // 从站返回状态
};
struct DatasetData {
	SlavePDOS pdos[Total_Axis_Num];
};
struct SharedData {
    KSHandle kernel_handle{};                    // 内核句柄
    KSHandle adapter_handle{};                   // 网络适配器句柄
    KSHandle master_handle{};                    // 主站句柄
    KSHandle dataset_handle{};                   // Dataset句柄
    KSHandle dataset_callback_handle{};          // Dataset 的回调的句柄
    KSHandle dataset_task_handle{};              // Dataset Task 脚本的句柄
    KSHandle timer_handle{};                     // timer句柄
    KSHandle timer_callback_handle{};            // timer 的回调的句柄
    KSHandle timer_task_handle{};                // timer Task 脚本的句柄
    KSHandle task_callback_handle{};             // 执行 Task 脚本的回调的句柄
    KSHandle task_handle{};                      // 执行 Task 回调的任务的句柄
    KSHandle hMutex;                             // Handle of the mutex for synchronized data access
    KSError error;
    int task_cpu{};                              // 要用于 Task 任务的 CPU 的索引
    int abort{};                                 // 指示 Task 任务结束工作的标志
    int count{};
    int command_position[Total_Axis_Num];        // 各轴目标位置
    int actual_position[Total_Axis_Num];         // 各轴实际位置
    uint16_t statues[Total_Axis_Num];            // 各轴状态
    uint16_t control_words[Total_Axis_Num];      // 各轴控制字
    int command_type;                            // 用户指令 1. enable 2. disable 3. move 4. home 5. stop
};

#pragma pack()